
///////////////////////////////////////////////////////////////////////////////
//
//  Copyright (c) 2002, John K. Grant and Perry L. Miller IV.
//  All rights reserved.
//  BSD License: http://www.opensource.org/licenses/bsd-license.html
//
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
//
//  Functor class for horizontal joystick input.
//
///////////////////////////////////////////////////////////////////////////////

#include "Interaction/Input/JoystickHorizontal.h"

using namespace Usul::Functors::Interaction::Input;


///////////////////////////////////////////////////////////////////////////////
//
//  Default constructor.
//
///////////////////////////////////////////////////////////////////////////////

JoystickHorizontal::JoystickHorizontal ( Unknown *caller, const std::string &name ) : 
  BaseClass ( caller, name ),
  _j ( caller )
{
}


///////////////////////////////////////////////////////////////////////////////
//
//  Copy constructor.
//
///////////////////////////////////////////////////////////////////////////////

JoystickHorizontal::JoystickHorizontal ( const JoystickHorizontal &j ) : BaseClass ( j ),
  _j ( j._j )
{
}


///////////////////////////////////////////////////////////////////////////////
//
//  Destructor.
//
///////////////////////////////////////////////////////////////////////////////

JoystickHorizontal::~JoystickHorizontal()
{
}


///////////////////////////////////////////////////////////////////////////////
//
//  Get the Horizontal analog input.
//
///////////////////////////////////////////////////////////////////////////////

void JoystickHorizontal::operator()()
{
  Guard guard ( this->mutex() );
  _value = ( ( _j.valid() ) ? _j->joystickHorizontal() : _value );
}


///////////////////////////////////////////////////////////////////////////////
//
//  Set the caller.
//
///////////////////////////////////////////////////////////////////////////////

void JoystickHorizontal::caller ( Unknown* caller )
{
  // Call the base class.
  BaseClass::caller ( caller );

  // Set our internal query pointer to caller.
  Guard guard ( this->mutex() );
  _j = caller;
}


///////////////////////////////////////////////////////////////////////////////
//
//  Clone.
//
///////////////////////////////////////////////////////////////////////////////

Usul::Functors::Interaction::Common::BaseFunctor* JoystickHorizontal::clone()
{
  return new JoystickHorizontal ( *this );
}
